﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.Globalization;

using CNCSoft.EData;
using CNCSoft.EData.SqlServer;
using System.Data.SqlClient;
using Common;

namespace CNCSoft.ErpApps.TMS.Vattu
{
    public partial class frmDMVattu : Form
    {
        public frmDMVattu()
        {
            // Sets the UI culture to VietNamese (VietNam) / English
            if (GlobalVariable.WSInfo.Language == "Tiếng Việt")
                Thread.CurrentThread.CurrentUICulture = new CultureInfo("vi-VN");
            else if (GlobalVariable.WSInfo.Language == "English")
                Thread.CurrentThread.CurrentUICulture = new CultureInfo("en");

            InitializeComponent();
        }

        private bool _EditMode;
        string _ReturnMaVatTuSelected;
        string _ReturnTenVatTuSelected;

        public bool EditMode
        {
            get { return _EditMode; }
            set { _EditMode = value; }
        }

        public string ReturnMaVatTuSelected
        {
            get { return _ReturnMaVatTuSelected; }
            set { _ReturnMaVatTuSelected = value; }
        }

        public string ReturnTenVatTuSelected
        {
            get { return _ReturnTenVatTuSelected; }
            set { _ReturnTenVatTuSelected = value; }
        }


        private void frmDMVattu_Load(object sender, EventArgs e)
        {
            Load_DM_Vattu();
            //contextMenu.Visible = _EditMode;
            if (_EditMode)
                treeViewDMVattu.ContextMenuStrip = contextMenu;
        }

        private void Load_DM_Vattu()
        {
            SqlDataReader DMVatTu_DataReader = SQLHelper.ExecuteReader(GlobalVariable.WSInfo.ConnectionString,
                                                      "SELECT * From DM_VATTU ");
            treeViewDMVattu.BeginUpdate();
            treeViewDMVattu.Nodes.Clear();

            while (DMVatTu_DataReader.Read())
            {
                try
                {
                    string strMa = DMVatTu_DataReader["MaVatTu"].ToString().Trim();
                    string strTen = DMVatTu_DataReader["TenVatTu"].ToString().Trim();
                    if (strMa.Length < 4)  //Khong co Parent node   
                    {
                        TreeNode item = treeViewDMVattu.Nodes.Add(strMa, strTen);
                        item.Name = strMa;
                    }
                    else  //Thuoc 1 parent node nao do
                    {
                        string strMaCha = strMa.Substring(0, strMa.Length - 4);
                        //treeViewDMVattu.Nodes[
                        TreeNode parentItem = treeViewDMVattu.Nodes.Find(strMaCha, true)[0];
                        if (parentItem != null)
                        {
                            TreeNode item = parentItem.Nodes.Add(strMa, strTen);
                            item.Name = strMa;
                        }
                        else
                            MessageBox.Show(strMaCha + "  Khong co");
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
            treeViewDMVattu.EndUpdate();

            if (optExpand.Checked) treeViewDMVattu.ExpandAll();
            if (optCollapse.Checked) treeViewDMVattu.CollapseAll();

        }

        
        
        private string GetMaVatTuTiepTheo(string strMaVatTuDangChon, bool bCungCap)
        {
            string strMaVatTuTiepTheo = "";
            string strSQL = "";

            if (bCungCap)
            {
                //Xac dih cau lenh truy van
                if (strMaVatTuDangChon.Length > 4)    //Co cha
                {
                    strSQL = "select max(left(maVattu, " + (strMaVatTuDangChon.Length) + ")) as MaxMaVattu from dm_vattu " +
                             "where left(mavattu, " + (strMaVatTuDangChon.Length - 4) + ") = '" + strMaVatTuDangChon.Substring(0, strMaVatTuDangChon.Length - 4) + "' ";
                    //MessageBox.Show(strSQL);
                }
                else  //Root
                {
                    strSQL = "select max(left(maVattu, 3)) as MaxMaVattu from dm_vattu ";
                    //MessageBox.Show(strSQL);
                }
                string MaxMaVT = "";
                try
                {
                    MaxMaVT = (string)SQLHelper.ExecuteScalar(GlobalVariable.WSInfo.ConnectionString, strSQL);
                    if (MaxMaVT.Trim().Length > 3)
                        MaxMaVT = MaxMaVT.Trim().Substring(MaxMaVT.Trim().Length - 3, 3);
                }
                catch
                {
                    MaxMaVT = "0";
                }

                int STT_Tiep = int.Parse(MaxMaVT) + 1;
                if (strMaVatTuDangChon.Length > 4)
                    strMaVatTuTiepTheo = strMaVatTuDangChon.Substring(0, strMaVatTuDangChon.Length - 4) + "." + STT_Tiep.ToString("000");
                else
                    strMaVatTuTiepTheo = STT_Tiep.ToString("000");
            }
            else //Them muc con
            {
                strSQL = "select max(left(maVattu, " + (strMaVatTuDangChon.Length + 4) + ")) as MaxMaVattu from dm_vattu " +
                             "where left(mavattu, " + (strMaVatTuDangChon.Length) + ") = '" + strMaVatTuDangChon + "' ";
                //MessageBox.Show(strSQL);
                string MaxMaVT = "";
                try
                {
                    MaxMaVT = (string)SQLHelper.ExecuteScalar(GlobalVariable.WSInfo.ConnectionString, strSQL);
                    if (MaxMaVT.Trim().Length > strMaVatTuDangChon.Length)
                        MaxMaVT = MaxMaVT.Trim().Substring(MaxMaVT.Trim().Length - 3, 3);
                    else
                        MaxMaVT = "000";
                }
                catch
                {
                    MaxMaVT = "0";
                }

                int STT_Tiep = int.Parse(MaxMaVT) + 1;
                //if (strMaVatTuDangChon.Length > 4)
                    strMaVatTuTiepTheo = strMaVatTuDangChon + "." + STT_Tiep.ToString("000");
                //else
                //    strMaVatTuTiepTheo = STT_Tiep.ToString("000");
            }

            return strMaVatTuTiepTheo;
        }

        private void cmdThemVatTuCon_Click(object sender, EventArgs e)
        {
            Vattu.frmThemVatTu frmThemVT = new frmThemVatTu();
            
            frmThemVT.addNewMode = true;
            frmThemVT.MaVatTu = GetMaVatTuTiepTheo(treeViewDMVattu.SelectedNode.Name, false);
            frmThemVT.TenVatTuCha = treeViewDMVattu.SelectedNode.FullPath; 

            DialogResult dr = frmThemVT.ShowDialog(this);
            if (dr == DialogResult.OK)
            {
                TreeNode newNode = new TreeNode(frmThemVT.TenVatTu);
                newNode.Name = frmThemVT.MaVatTu;
                treeViewDMVattu.SelectedNode.Nodes.Add(newNode);
                treeViewDMVattu.SelectedNode = newNode;
            }
            frmThemVT.Dispose();
        }


        private int GetNodeNumberOrder(TreeNode node)
        {
            /*
            int position = 0;
            TreeNode backRunner = node;
            while ((backRunner = backRunner.PrevNode) != null)			
                position++;	

            return position;
            */
            return node.Index;
        }

        private void cmdThemVatTuCungCap_Click(object sender, EventArgs e)
        {
            try
            {
                Vattu.frmThemVatTu frmThemVT = new frmThemVatTu();
                frmThemVT.addNewMode = true;

                try { frmThemVT.MaVatTu = GetMaVatTuTiepTheo(treeViewDMVattu.SelectedNode.Name, true); }
                catch { frmThemVT.MaVatTu = ""; }

                frmThemVT.TenVatTuCha = treeViewDMVattu.SelectedNode.Parent == null ? "" : treeViewDMVattu.SelectedNode.Parent.FullPath; 

                DialogResult dr = frmThemVT.ShowDialog(this);
                if (dr == DialogResult.OK)
                {
                    TreeNode newNode = new TreeNode(frmThemVT.TenVatTu);
                    newNode.Name = frmThemVT.MaVatTu;

                    if (treeViewDMVattu.Nodes.Count > 0)
                    {
                        int nodeIndex = GetNodeNumberOrder(treeViewDMVattu.SelectedNode) + 1 ;
                        object parent = treeViewDMVattu.SelectedNode.Parent;
                        if (parent != null)
                            ((TreeNode)parent).Nodes.Insert(nodeIndex, newNode);
                        else 
                            treeViewDMVattu.Nodes.Insert(nodeIndex, newNode);
                    }
                    else
                        treeViewDMVattu.Nodes.Add(newNode);

                    treeViewDMVattu.SelectedNode = newNode;

                }
                frmThemVT.Dispose();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void cmdRefresh_Click(object sender, EventArgs e)
        {
            Load_DM_Vattu();
            
        }

        private void optExpand_CheckedChanged(object sender, EventArgs e)
        {
            if (optExpand.Checked)
                treeViewDMVattu.ExpandAll();
            else
                treeViewDMVattu.CollapseAll();
        }

        private void cndHieuChinhVatTu_Click(object sender, EventArgs e)
        {
            Vattu.frmThemVatTu frmThemVT = new frmThemVatTu();
            frmThemVT.addNewMode = false;
            frmThemVT.MaVatTu = treeViewDMVattu.SelectedNode.Name;
            frmThemVT.TenVatTu = treeViewDMVattu.SelectedNode.Text;
            DialogResult dr = frmThemVT.ShowDialog(this);

            if (dr == DialogResult.OK)
            {
                treeViewDMVattu.SelectedNode.Text = frmThemVT.TenVatTu ;
            }
            
            frmThemVT.Dispose();
        }

        private void cndXoaVatTu_Click(object sender, EventArgs e)
        {
            if (treeViewDMVattu.SelectedNode.Nodes.Count > 0)
            {
                MessageBox.Show("Không thể xóa mục này vì có chứa mục con", "Xoa vat tu", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }

            if (MessageBox.Show("Bạn có thật sự muốn xóa vật tư: " + treeViewDMVattu.SelectedNode.Text, "Xoa vat tu", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) != System.Windows.Forms.DialogResult.Yes)
                return;

            try
            {
                string SQLDelete = "DELETE DM_VATTU WHERE MaVatTu = '" + treeViewDMVattu.SelectedNode.Name + "'";
                //MessageBox.Show(SQLDelete);
                SQLHelper.ExecuteScalar(GlobalVariable.WSInfo.ConnectionString, SQLDelete);

                treeViewDMVattu.SelectedNode.Remove();
            }
            catch (Exception ex)
            {
                MessageBox.Show (ex.Message);
            }
        }

       
        private void treeViewDMVattu_AfterSelect(object sender, TreeViewEventArgs e)
        {
            toolStripStatusLabel1.Text = treeViewDMVattu.SelectedNode.FullPath;

        }

        private void cmdFind_Click(object sender, EventArgs e)
        {
            FindNodeInHierarchy(treeViewDMVattu.Nodes, txtFindString.Text);
        }

        bool m_bNodeFound;
        private void FindNodeInHierarchy(TreeNodeCollection nodes, string strSearchValue)
        {
            for (int iCount = 0; iCount < nodes.Count; iCount++)
            {
                if (nodes[iCount].Text.ToUpper().Contains(strSearchValue.ToUpper()))
                {
                    treeViewDMVattu.SelectedNode = nodes[iCount];
                    treeViewDMVattu.Select();
                    m_bNodeFound = true;
                    return;
                }
                else
                {
                    m_bNodeFound = false;
                }
                //expand the nodes
                nodes[iCount].Expand();
                //Recursively search the text in the child nodes
                FindNodeInHierarchy(nodes[iCount].Nodes, strSearchValue);
                if (m_bNodeFound)
                {
                    return;
                }
                //collapses the nodes
                nodes[iCount].Collapse();
                //return;
            }
        }

        private void treeViewDMVattu_DoubleClick(object sender, EventArgs e)
        {
            if (treeViewDMVattu.SelectedNode.Nodes.Count > 0)
                return;  //Chi chon vat tu la item cuoi cung (ko co con)

            if (_EditMode)
            {
                _ReturnMaVatTuSelected = "";
                _ReturnTenVatTuSelected = "";
            }
            else
            {
                _ReturnMaVatTuSelected = treeViewDMVattu.SelectedNode.Name;
                _ReturnTenVatTuSelected = treeViewDMVattu.SelectedNode.Text;
                this.Close();
            }
        }
        


    }
}
